home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / wgdb-42.lha / wgdb-4.2 / gdb / ns32k-opcode.h < prev    next >
C/C++ Source or Header  |  1992-09-11  |  11KB  |  329 lines

  1. /* ns32k-opcode.h */
  2.  
  3. #ifndef ns32k_opcodeT
  4. #define ns32k_opcodeT int
  5. #endif /* no ns32k_opcodeT */
  6.  
  7. struct not_wot            /* ns32k opcode table: wot to do with this */
  8.                 /* particular opcode */
  9. {
  10.   int obits;        /* number of opcode bits */
  11.   int ibits;        /* number of instruction bits */
  12.   ns32k_opcodeT    code;    /* op-code (may be > 8 bits!) */
  13.   char *args;        /* how to compile said opcode */
  14. };
  15.  
  16. struct not            /* ns32k opcode text */
  17. {
  18.   char *            name;    /* opcode name: lowercase string  [key]  */
  19.   struct not_wot    detail;    /* rest of opcode table          [datum] */
  20. };
  21.  
  22. /* Instructions look like this:
  23.     
  24.    basic instruction--1, 2, or 3 bytes
  25.    index byte for operand A, if operand A is indexed--1 byte
  26.    index byte for operand B, if operand B is indexed--1 byte
  27.    addressing extension for operand A
  28.    addressing extension for operand B
  29.    implied operands
  30.  
  31.    Operand A is the operand listed first in the following opcode table.
  32.    Operand B is the operand listed second in the following opcode table.
  33.    All instructions have at most 2 general operands, so this is enough.
  34.    The implied operands are associated with operands other than A and B.
  35.  
  36.    Each operand has a digit and a letter.
  37.    
  38.    The digit gives the position in the assembly language.  The letter,
  39.    one of the following, tells us what kind of operand it is.  */
  40.  
  41. /* F : 32 bit float
  42.  * L : 64 bit float
  43.  * B : byte
  44.  * W : word
  45.  * D : double-word
  46.  * Q : quad-word
  47.  * d : displacement
  48.  * q : quick
  49.  * i : immediate (8 bits)
  50.  * r : register number (3 bits)
  51.  * p : displacement - pc relative addressing
  52. */
  53. static struct not
  54. notstrs[] =
  55. {
  56.   { "absf",    14,24,    0x35be,    "1F2F" },
  57.   { "absl",    14,24,    0x34be,    "1L2L" },
  58.   { "absb",    14,24,    0x304e, "1B2B" },
  59.   { "absw",    14,24,    0x314e, "1W2W" },
  60.   { "absd",    14,24,    0x334e, "1D2D" },
  61.   { "acbb",     7,16,    0x4c,    "2B1q3p" },
  62.   { "acbw",      7,16,  0x4d,   "2W1q3p" },
  63.   { "acbd",      7,16,  0x4f,   "2D1q3p" },
  64.   { "addf",    14,24,    0x01be,    "1F2F" },
  65.   { "addl",    14,24,    0x00be, "1L2L" },
  66.   { "addb",     6,16,    0x00,    "1B2B" },
  67.   { "addw",     6,16,    0x01,    "1W2W" },
  68.   { "addd",     6,16,    0x03,    "1D2D" },
  69.   { "addcb",     6,16,    0x10,    "1B2B" },
  70.   { "addcw",     6,16,    0x11,    "1W2W" },
  71.   { "addcd",     6,16,    0x13,    "1D2D" },
  72.   { "addpb",    14,24,    0x3c4e,    "1B2B" },
  73.   { "addpw",    14,24,    0x3d4e,    "1W2W" },
  74.   { "addpd",    14,24,    0x3f4e,    "1D2D" },
  75.   { "addqb",     7,16,    0x0c,    "2B1q" },
  76.   { "addqw",     7,16,    0x0d,    "2W1q" },
  77.   { "addqd",     7,16,    0x0f,    "2D1q" },
  78.   { "addr",     6,16,    0x27,    "1D2D" },
  79.   { "adjspb",    11,16,    0x057c,    "1B" },
  80.   { "adjspw",    11,16,    0x057d,    "1W" },
  81.   { "adjspd",    11,16,    0x057f,    "1D" },
  82.   { "andb",     6,16,    0x28,    "1B2B" },
  83.   { "andw",     6,16,    0x29,    "1W2W" },
  84.   { "andd",     6,16,    0x2b,    "1D2D" },
  85.   { "ashb",    14,24,    0x044e,    "1B2B" },
  86.   { "ashw",    14,24,    0x054e,    "1B2W" },
  87.   { "ashd",    14,24,    0x074e,    "1B2D" },
  88.   { "beq",     8,8,    0x0a,    "1p" },
  89.   { "bne",     8,8,    0x1a,    "1p" },
  90.   { "bcs",     8,8,    0x2a,    "1p" },
  91.   { "bcc",     8,8,    0x3a,    "1p" },
  92.   { "bhi",     8,8,    0x4a,    "1p" },
  93.   { "bls",     8,8,    0x5a,    "1p" },
  94.   { "bgt",     8,8,    0x6a,    "1p" },
  95.   { "ble",     8,8,    0x7a,    "1p" },
  96.   { "bfs",     8,8,    0x8a,    "1p" },
  97.   { "bfc",     8,8,    0x9a,    "1p" },
  98.   { "blo",     8,8,    0xaa,    "1p" },
  99.   { "bhs",     8,8,    0xba,    "1p" },
  100.   { "blt",     8,8,    0xca,    "1p" },
  101.   { "bge",     8,8,    0xda,    "1p" },
  102.   { "bicb",     6,16,    0x08,    "1B2B" },
  103.   { "bicw",     6,16,    0x09,    "1W2W" },
  104.   { "bicd",     6,16,    0x0b,    "1D2D" },
  105.   { "bicpsrb",    11,16,    0x17c,    "1B" },
  106.   { "bicpsrw",    11,16,    0x17d,    "1W" },
  107.   { "bispsrb",    11,16,    0x37c,    "1B" },
  108.   { "bispsrw",    11,16,    0x37d,    "1W" },
  109.   { "bpt",     8,8,    0xf2,    "" },
  110.   { "br",     8,8,    0xea,    "1p" },
  111.   { "bsr",     8,8,    0x02,    "1p" },
  112.   { "caseb",    11,16,    0x77c,    "1B" },
  113.   { "casew",    11,16,    0x77d,    "1W" },
  114.   { "cased",    11,16,    0x77f,    "1D" },
  115.   { "cbitb",    14,24,    0x084e,    "1B2D" },
  116.   { "cbitw",    14,24,    0x094e,    "1W2D" },
  117.   { "cbitd",    14,24,    0x0b4e,    "1D2D" },
  118.   { "cbitib",    14,24,    0x0c4e,    "1B2D" },
  119.   { "cbitiw",    14,24,    0x0d4e,    "1W2D" },
  120.   { "cbitid",    14,24,    0x0f4e,    "1D2D" },
  121.   { "checkb",    11,24,    0x0ee,    "2A3B1r" },
  122.   { "checkw",    11,24,    0x1ee,    "2A3B1r" },
  123.   { "checkd",    11,24,    0x3ee,    "2A3D1r" },
  124.   { "cmpf",    14,24,    0x09be,    "1F2F" },
  125.   { "cmpl",    14,24,    0x08be,    "1L2L" },
  126.   { "cmpb",     6,16,    0x04,    "1B2B" },
  127.   { "cmpw",     6,16,    0x05,    "1W2W" },
  128.   { "cmpd",     6,16,    0x07,    "1D2D" },
  129.   { "cmpmb",    14,24,    0x04ce,    "1D2D3d" },
  130.   { "cmpmw",    14,24,    0x05ce,    "1D2D3d" },
  131.   { "cmpmd",    14,24,    0x07ce,    "1D2D3d" },
  132.   { "cmpqb",     7,16,    0x1c,    "2B1q" },
  133.   { "cmpqw",     7,16,    0x1d,    "2W1q" },
  134.   { "cmpqd",     7,16,    0x1f,    "2D1q" },
  135.   { "cmpsb",    16,16,    0x040e,    "1i" },
  136.   { "cmpsw",    16,16,    0x050e,    "1i" },
  137.   { "cmpsd",    16,16,    0x070e,    "1i" },
  138.   { "cmpst",    16,16,    0x840e,    "1i" },
  139.   { "comb",    14,24,    0x344e,    "1B2B" },
  140.   { "comw",    14,24,    0x354e,    "1W2W" },
  141.   { "comd",    14,24,    0x374e,    "1D2D" },
  142.   { "cvtp",    11,24,    0x036e,    "2D3D1r" },
  143.   { "cxp",     8,8,    0x22,    "1p" },
  144.   { "cxpd",    11,16,    0x07f,    "1D" },
  145.   { "deib",    14,24,    0x2cce,    "1B2W" },
  146.   { "deiw",    14,24,    0x2dce,    "1W2D" },
  147.   { "deid",    14,24,    0x2fce,    "1D2Q" },
  148.   { "dia",     8,8,    0xc2,    "" },
  149.   { "divf",    14,24,    0x21be,    "1F2F" },
  150.   { "divl",    14,24,    0x20be,    "1L2L" },
  151.   { "divb",    14,24,    0x3cce,    "1B2B" },
  152.   { "divw",    14,24,    0x3dce,    "1W2W" },
  153.   { "divd",    14,24,    0x3fce,    "1D2D" },
  154.   { "enter",     8,8,    0x82,    "1i2d" },
  155.   { "exit",     8,8,    0x92,    "1i" },
  156.   { "extb",    11,24,    0x02e,    "2D3B1r4d" },
  157.   { "extw",    11,24,    0x12e,    "2D3W1r4d" },
  158.   { "extd",    11,24,    0x32e,    "2D3D1r4d" },
  159.   { "extsb",    14,24,    0x0cce,    "1D2B3i" },
  160.   { "extsw",    14,24,    0x0dce,    "1D2W3i" },
  161.   { "extsd",    14,24,    0x0fce,    "1D2D3i" },
  162.   { "ffsb",    14,24,    0x046e,    "1B2B" },
  163.   { "ffsw",    14,24,    0x056e,    "1W2B" },
  164.   { "ffsd",    14,24,    0x076e,    "1D2B" },
  165.   { "flag",     8,8,    0xd2,    "" },
  166.   { "floorfb",    14,24,    0x3c3e,    "1F2B" },
  167.   { "floorfw",    14,24,    0x3d3e,    "1F2W" },
  168.   { "floorfd",    14,24,    0x3f3e,    "1F2D" },
  169.   { "floorlb",    14,24,    0x383e,    "1L2B" },
  170.   { "floorlw",    14,24,    0x393e,    "1L2W" },
  171.   { "floorld",    14,24,    0x3b3e,    "1L2D" },
  172.   { "ibitb",    14,24,    0x384e,    "1B2D" },
  173.   { "ibitw",    14,24,    0x394e,    "1W2D" },
  174.   { "ibitd",    14,24,    0x3b4e,    "1D2D" },
  175.   { "indexb",    11,24,    0x42e,    "2B3B1r" },
  176.   { "indexw",    11,24,    0x52e,    "2W3W1r" },
  177.   { "indexd",    11,24,    0x72e,    "2D3D1r" },
  178.   { "insb",    11,24,    0x0ae,    "2B3B1r4d" },
  179.   { "insw",    11,24,    0x1ae,    "2W3W1r4d" },
  180.   { "insd",    11,24,    0x3ae,    "2D3D1r4d" },
  181.   { "inssb",    14,24,    0x08ce,    "1B2D3i" },
  182.   { "inssw",    14,24,    0x09ce,    "1W2D3i" },
  183.   { "inssd",    14,24,    0x0bce,    "1D2D3i" },
  184.   { "jsr",    11,16,    0x67f,    "1A" },
  185.   { "jump",    11,16,    0x27f,    "1A" },
  186.   { "lfsr",    19,24,    0x00f3e,"1D" },
  187.   { "lmr",    15,24,    0x0b1e,    "2D1q" },
  188.   { "lprb",     7,16,    0x6c,    "2B1q" },
  189.   { "lprw",     7,16,    0x6d,    "2W1q" },
  190.   { "lprd",     7,16,    0x6f,    "2D1q" },
  191.   { "lshb",    14,24,    0x144e,    "1B2B" },
  192.   { "lshw",    14,24,    0x154e,    "1B2W" },
  193.   { "lshd",    14,24,    0x174e,    "1B2D" },
  194.   { "meib",    14,24,    0x24ce,    "1B2W" },
  195.   { "meiw",    14,24,    0x25ce,    "1W2D" },
  196.   { "meid",    14,24,    0x27ce,    "1D2Q" },
  197.   { "modb",    14,24,    0x38ce,    "1B2B" },
  198.   { "modw",    14,24,    0x39ce,    "1W2W" },
  199.   { "modd",    14,24,    0x3bce,    "1D2D" },
  200.   { "movf",    14,24,    0x05be,    "1F2F" },
  201.   { "movl",    14,24,    0x04be,    "1L2L" },
  202.   { "movb",     6,16,    0x14,    "1B2B" },
  203.   { "movw",     6,16,    0x15,    "1W2W" },
  204.   { "movd",     6,16,    0x17,    "1D2D" },
  205.   { "movbf",    14,24,    0x043e,    "1B2F" },
  206.   { "movwf",    14,24,    0x053e,    "1W2F" },
  207.   { "movdf",    14,24,    0x073e,    "1D2F" },
  208.   { "movbl",    14,24,    0x003e,    "1B2L" },
  209.   { "movwl",    14,24,    0x013e,    "1W2L" },
  210.   { "movdl",    14,24,    0x033e,    "1D2L" },
  211.   { "movfl",    14,24,    0x1b3e,    "1F2L" },
  212.   { "movlf",    14,24,    0x163e,    "1L2F" },
  213.   { "movmb",    14,24,    0x00ce,    "1D2D3d" },
  214.   { "movmw",    14,24,    0x01ce,    "1D2D3d" },
  215.   { "movmd",    14,24,    0x03ce,    "1D2D3d" },
  216.   { "movqb",     7,16,    0x5c,    "2B1q" },
  217.   { "movqw",     7,16,    0x5d,    "2B1q" },
  218.   { "movqd",     7,16,    0x5f,    "2B1q" },
  219.   { "movsb",    16,16,    0x000e,    "1i" },
  220.   { "movsw",    16,16,    0x010e,    "1i" },
  221.   { "movsd",    16,16,    0x030e,    "1i" },
  222.   { "movst",    16,16,    0x800e,    "1i" },
  223.   { "movsub",    14,24,    0x0cae,    "1A1A" },
  224.   { "movsuw",    14,24,    0x0dae,    "1A1A" },
  225.   { "movsud",    14,24,    0x0fae,    "1A1A" },
  226.   { "movusb",    14,24,    0x1cae,    "1A1A" },
  227.   { "movusw",    14,24,    0x1dae,    "1A1A" },
  228.   { "movusd",    14,24,    0x1fae,    "1A1A" },
  229.   { "movxbd",    14,24,    0x1cce,    "1B2D" },
  230.   { "movxwd",    14,24,    0x1dce,    "1W2D" },
  231.   { "movxbw",    14,24,    0x10ce,    "1B2W" },
  232.   { "movzbd",    14,24,    0x18ce,    "1B2D" },
  233.   { "movzwd",    14,24,    0x19ce,    "1W2D" },
  234.   { "movzbw",    14,24,    0x14ce,    "1B2W" },
  235.   { "mulf",    14,24,    0x31be,    "1F2F" },
  236.   { "mull",    14,24,    0x30be,    "1L2L" },
  237.   { "mulb",    14,24,    0x20ce, "1B2B" },
  238.   { "mulw",    14,24,    0x21ce, "1W2W" },
  239.   { "muld",    14,24,    0x23ce, "1D2D" },
  240.   { "negf",    14,24,    0x15be, "1F2F" },
  241.   { "negl",    14,24,    0x14be, "1L2L" },
  242.   { "negb",    14,24,    0x204e, "1B2B" },
  243.   { "negw",    14,24,    0x214e, "1W2W" },
  244.   { "negd",    14,24,    0x234e, "1D2D" },
  245.   { "nop",     8,8,    0xa2,    "" },
  246.   { "notb",    14,24,    0x244e, "1B2B" },
  247.   { "notw",    14,24,    0x254e, "1W2W" },
  248.   { "notd",    14,24,    0x274e, "1D2D" },
  249.   { "orb",     6,16,    0x18,    "1B1B" },
  250.   { "orw",     6,16,    0x19,    "1W1W" },
  251.   { "ord",     6,16,    0x1b,    "1D2D" },
  252.   { "quob",    14,24,    0x30ce,    "1B2B" },
  253.   { "quow",    14,24,    0x31ce,    "1W2W" },
  254.   { "quod",    14,24,    0x33ce,    "1D2D" },
  255.   { "rdval",    19,24,    0x0031e,"1A" },
  256.   { "remb",    14,24,    0x34ce,    "1B2B" },
  257.   { "remw",    14,24,    0x35ce,    "1W2W" },
  258.   { "remd",    14,24,    0x37ce,    "1D2D" },
  259.   { "restore",     8,8,    0x72,    "1i" },
  260.   { "ret",     8,8,    0x12,    "1d" },
  261.   { "reti",     8,8,    0x52,    "" },
  262.   { "rett",     8,8,    0x42,    "" },
  263.   { "rotb",    14,24,    0x004e,    "1B2B" },
  264.   { "rotw",    14,24,    0x014e,    "1B2W" },
  265.   { "rotd",    14,24,    0x034e,    "1B2D" },
  266.   { "roundfb",    14,24,    0x243e,    "1F2B" },
  267.   { "roundfw",    14,24,    0x253e,    "1F2W" },
  268.   { "roundfd",    14,24,    0x273e,    "1F2D" },
  269.   { "roundlb",    14,24,    0x203e,    "1L2B" },
  270.   { "roundlw",    14,24,    0x213e,    "1L2W" },
  271.   { "roundld",    14,24,    0x233e,    "1L2D" },
  272.   { "rxp",     8,8,    0x32,    "1d" },
  273.   { "sCONDb",     7,16,    0x3c,    "2B1q" },
  274.   { "sCONDw",     7,16,    0x3d,    "2D1q" },
  275.   { "sCONDd",     7,16,    0x3f,    "2D1q" },
  276.   { "save",     8,8,    0x62,    "1i" },
  277.   { "sbitb",    14,24,    0x184e,    "1B2A" },
  278.   { "sbitw",    14,24,    0x194e,    "1W2A" },
  279.   { "sbitd",    14,24,    0x1b4e,    "1D2A" },
  280.   { "sbitib",    14,24,    0x1c4e,    "1B2A" },
  281.   { "sbitiw",    14,24,    0x1d4e,    "1W2A" },
  282.   { "sbitid",    14,24,    0x1f4e,    "1D2A" },
  283.   { "setcfg",    15,24,    0x0b0e,    "5D1q" },
  284.   { "sfsr",    14,24,    0x373e,    "5D1D" },
  285.   { "skpsb",    16,16,    0x0c0e,    "1i" },
  286.   { "skpsw",    16,16,    0x0d0e,    "1i" },
  287.   { "skpsd",    16,16,    0x0f0e, "1i" },
  288.   { "skpst",    16,16,    0x8c0e,    "1i" },
  289.   { "smr",    15,24,    0x0f1e,    "2D1q" },
  290.   { "sprb",     7,16,    0x2c,    "2B1q" },
  291.   { "sprw",     7,16,    0x2d,    "2W1q" },
  292.   { "sprd",     7,16,    0x2f,    "2D1q" },
  293.   { "subf",    14,24,    0x11be,    "1F2F" },
  294.   { "subl",    14,24,    0x10be,    "1L2L" },
  295.   { "subb",     6,16,    0x20,    "1B2B" },
  296.   { "subw",     6,16,    0x21,    "1W2W" },
  297.   { "subd",     6,16,    0x23,    "1D2D" },
  298.   { "subcb",     6,16,    0x30,    "1B2B" },
  299.   { "subcw",     6,16,    0x31,    "1W2W" },
  300.   { "subcd",     6,16,    0x33,    "1D2D" },
  301.   { "subpb",    14,24,    0x2c4e,    "1B2B" },
  302.   { "subpw",    14,24,    0x2d4e,    "1W2W" },
  303.   { "subpd",    14,24,    0x2f4e,    "1D2D" },
  304. #ifdef NS32K_SVC_IMMED_OPERANDS
  305.   { "svc",     8,8,    0xe2,    "2i1i" }, /* not really, but unix uses it */
  306. #else
  307.   { "svc",     8,8,    0xe2,    "" }, /* not really, but unix uses it */
  308. #endif
  309.   { "tbitb",     6,16,    0x34,    "1B2A" },
  310.   { "tbitw",     6,16,    0x35,    "1W2A" },
  311.   { "tbitd",     6,16,    0x37,    "1D2A" },
  312.   { "truncfb",    14,24,    0x2c3e,    "1F2B" },
  313.   { "truncfw",    14,24,    0x2d3e,    "1F2W" },
  314.   { "truncfd",    14,24,    0x2f3e,    "1F2D" },
  315.   { "trunclb",    14,24,    0x283e,    "1L2B" },
  316.   { "trunclw",    14,24,    0x293e,    "1L2W" },
  317.   { "truncld",    14,24,    0x2b3e,    "1L2D" },
  318.   { "wait",     8,8,    0xb2,    "" },
  319.   { "wrval",    19,24,    0x0071e,"1A" },
  320.   { "xorb",     6,16,    0x38,    "1B2B" },
  321.   { "xorw",     6,16,    0x39,    "1W2W" },
  322.   { "xord",     6,16,    0x3b,    "1D2D" },
  323. };                /* notstrs */
  324.  
  325. /* end: ns32k.opcode.h */
  326.  
  327. #define MAX_ARGS 4
  328. #define ARG_LEN 50
  329.